package com.obelisco.vista.componentes;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;

import org.apache.commons.beanutils.MethodUtils;

import com.obelisco.vista.controles.BindingSelectField;

import echopointng.ContainerEx;
import echopointng.ExtentEx;
import nextapp.echo2.app.Grid;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.SelectField;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Insets;

public class ContenedorBusquedaStandard extends ContenedorBusqueda {

	private ResourceBundle resourceBundle;

	private Map<String, String> camposFiltrar = new HashMap<String, String>();

	private Object servicio;
	
	// Este metodo de Busqueda debe llevar como primer parametro un string que es la
	// Propiedad por la que se va a buscar y segundo un Objeto que es el valor a Buscars
	private String metodoBusqueda;

	private BindingSelectField cmbCampo;
	
	private TextField txtValorABuscar;

	/**
	 * Creates a new <code>PaneBusquedaStandard</code>.
	 */
	public ContenedorBusquedaStandard() {
		super();
		// Add design-time configured components.
		initComponents();
	}

	
	
	/**
	 * Configures initial state of component. WARNING: AUTO-GENERATED METHOD.
	 * Contents will be overwritten.
	 */
	private void initComponents() {
		ContainerEx contenedor = new ContainerEx();
		contenedor.setWidth(new ExtentEx("100%"));
		add(contenedor);
		
		Grid grid1 = new Grid();
		grid1.setInsets(new Insets(new Extent(5, Extent.PX)));
		grid1.setWidth(new ExtentEx("100%"));	
		grid1.setSize(4);
		contenedor.add(grid1);
		Label label1 = new Label();
		label1.setText("Criterio");
		grid1.add(label1);
		cmbCampo = new BindingSelectField(150);
		cmbCampo.setWidth(new Extent(150, Extent.PX));
		cmbCampo.setStyleName("Obelisco.SelectField");
		grid1.add(cmbCampo);
		Label label2 = new Label();
		label2.setText("Valor");
		grid1.add(label2);
		txtValorABuscar = new TextField();
		txtValorABuscar.setWidth(new Extent(180, Extent.PX));
		txtValorABuscar.setStyleName("Obelisco.TextField");
		grid1.add(txtValorABuscar);
	}

	public Map<String, String> getCamposFiltrar() {
		return camposFiltrar;
	}



	public void setCamposFiltrar(Map<String, String> camposFiltrar) {		
		this.camposFiltrar = camposFiltrar;		
		List camposCombo = new ArrayList(this.camposFiltrar.keySet());
		Collections.reverse(camposCombo);
		cmbCampo.setItems(camposCombo);
	
	}



	public Object getServicio() {
		return servicio;
	}



	public void setServicio(Object servicio) {
		this.servicio = servicio;
	}



	public String getMetodoBusqueda() {
		return metodoBusqueda;
	}



	public void setMetodoBusqueda(String metodoBusqueda) {
		this.metodoBusqueda = metodoBusqueda;
	}



	@Override
	public List realizarBusqueda() {
		// TODO Auto-generated method stub
		// Se realiza el proceso de Busqueda

		List lista = new ArrayList();
		if ((cmbCampo.getSelectedItem() != null) && (!txtValorABuscar.getText().trim().equals("")))
		{
			Object argumentos[] = new Object[] {camposFiltrar.get(cmbCampo.getSelectedItem()),txtValorABuscar.getText()};
			try
			{				
				String nombreMetodo = metodoBusqueda;
				lista = (List) MethodUtils.invokeMethod(servicio, nombreMetodo, argumentos);
			}
			catch(Exception e)
			{	
				DialogoError.mostrar("Error en Busqueda", 101);
				e.printStackTrace();
			}
		}
			
		

		return lista;
	}



	@Override
	public void inicializar() {
		// TODO Auto-generated method stub
	}

}
